﻿using System;
using System.Web;
using System.Web.UI.WebControls;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using SharedLibraries;
using SharedLibraries.Constants;
using EntityObject;
using DataAccessObject;
using ThangNM_LIB.FUNC;
using ThangNM_LIB.DB;

namespace ThangNM.Admin
{
    public partial class FunctionUI : System.Web.UI.Page
    {
        public FunctionEO objFunctionEO_Temp
        {
            get { return (FunctionEO)ViewState["objFunctionEO_Temp"]; }
            set { ViewState["objFunctionEO_Temp"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Title_FormUC1.setTitle(ConstEx.Table_Name_C.Function, ConstEx.funcButtonToolBar.LIST);
                MsgUC1.setClearMsg();
                //if (ShareDAO.UserDAO.SelectBy_sPermission(Session["secret"], Convert.ToString(Request.Url.AbsolutePath), ConstEx.funcButtonToolBar.MAIN) == false)
                //{
                //    pnlDetail.Visible = false;
                //    grvList.Visible = false;
                //    Commons.setAccessDenied(Page, MsgUC1);
                //    return;
                //}
                if (!IsPostBack)
                {
                    ToolBarUC1.ViewGroupButtonByFunction(ConstEx.funcButtonToolBar.DETAIL);
                    ToolBarUC1.btnPreview.Visible = false;
                    BindData(true);
                }
            }
            catch (Exception ex)
            {
                objFunctionEO_Temp = new FunctionEO();
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
        }

        protected void BindData(Boolean IsPostBack)
        {
            grvList.DataSource = (new FunctionDAO()).SelectBy_isAll(BIT.iFalse);
            grvList.DataBind();
            if (IsPostBack)
                BindData_DDL();
        }

        protected void BindDetail(Int32 _PK_iFunctionID)
        {
            List<FunctionEO> lst = new List<FunctionEO>();
            DataTable dt = (new FunctionDAO()).SelectBy_PK_iFunctionID(_PK_iFunctionID);
            if (DataTableEx.DataTable_OK(dt))
            {
                string id = Convert.ToString(dt.Rows[0]["SUB"]);
                dt.Columns.Remove("SUB");
                objFunctionEO_Temp = ((List<FunctionEO>)ConvertEx.ConvertDataTableToListObject<FunctionEO>(dt, lst.GetType()))[0];
                string[] key = id.Split(',');
                foreach (ListItem item in cbliAttach.Items)
                {
                    if (key.Contains(item.Value))
                        item.Selected = true;
                    else
                        item.Selected = false;
                }
                key = objFunctionEO_Temp.sRole.Split(',');
                foreach (ListItem item in cblsRole.Items)
                {
                    if (key.Contains(item.Value))
                        item.Selected = true;
                    else
                        item.Selected = false;
                }
                txtsUrl.Text = objFunctionEO_Temp.sUrl;
                txtsName.Text = objFunctionEO_Temp.sName;
                chkbStatus.Checked = objFunctionEO_Temp.bStatus;
            }
            //lst = (List<FunctionEO>)ConvertEx.ConvertDataTableToListObject<FunctionEO>(dt, "FunctionEO", lst.GetType());
            //var result = (from x in lst where x.iParentID == 0 select x).First();
            ////lst.Single(x => (x.PK_iFunctionID.Equals(0)));
            //var result1 = lst.FindAll(x => (!x.iParentID.Equals(0)));
            //foreach (var item in result1)
            //{
            //    id = id + "," + (item.PK_iFunctionID - result.PK_iFunctionID).ToString();
            //}
        }

        protected void BindData_DDL()
        {
            cbliAttach.DataSource = GetListConstants.Function_Attach_GLC();
            cbliAttach.DataValueField = "Key";
            cbliAttach.DataTextField = "Value";
            cbliAttach.DataBind();

            cblsRole.DataSource = GetListConstants.Account_iPermission_GLC();
            cblsRole.DataValueField = "Key";
            cblsRole.DataTextField = "Value";
            cblsRole.DataBind();
        }

        protected void EventButtonToolBar_Click(object sender, CustomerEventArgs e)
        {
            if ((new ShareDAO.UserDAO()).SelectBy_sPermission(Session["secret"], Convert.ToString(Request.Url.AbsolutePath), e.iType) == false)
            {
                Commons.setAccessDenied(Page, MsgUC1);
                return;
            }
            switch (e.iType)
            {
                case ConstEx.funcButtonToolBar.INSERT_LIST: break;
                case ConstEx.funcButtonToolBar.INSERT_ITEM:
                    InsertItem();
                    break;
                case ConstEx.funcButtonToolBar.UPDATE_ITEM:
                    UpdateItem();
                    break;
                case ConstEx.funcButtonToolBar.DELETE_LIST: break;
                case ConstEx.funcButtonToolBar.DELETE_ITEM:
                    DeleteItem();
                    break;
                case ConstEx.funcButtonToolBar.REFRESH_LIST: break;
                case ConstEx.funcButtonToolBar.EXPORT_EXCEL: break;
                case ConstEx.funcButtonToolBar.RESET_FORM:
                    Refresh();
                    break;
            }
        }

        protected void Refresh()
        {
            txtsUrl.Text = "";
            txtsName.Text = "";
            chkbStatus.Checked = true;
            objFunctionEO_Temp = new FunctionEO();
            BindData(true);
        }

        protected void InsertItem()
        {
            try
            {
                if (String.IsNullOrEmpty(txtsUrl.Text))
                {
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Địa chỉ chức năng không được để trống.");
                    txtsUrl.Focus();
                    return;
                }
                if ((new FunctionDAO()).CheckExists_sUrl(OtherEx.RemoveDomainInUrl(txtsUrl.Text)))
                {
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Đã bị trùng địa chỉ với một chức năng khác.");
                    txtsUrl.Focus();
                    return;
                }
                if (String.IsNullOrEmpty(txtsName.Text))
                {
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Tên không được để trống.");
                    txtsName.Focus();
                    return;
                }
                objFunctionEO_Temp = new FunctionEO();
                objFunctionEO_Temp.PK_iFunctionID = 0;
                objFunctionEO_Temp.FK_iFunctionID = 0;
                objFunctionEO_Temp.sUrl = OtherEx.RemoveDomainInUrl(txtsUrl.Text);
                objFunctionEO_Temp.sName = txtsName.Text;
                objFunctionEO_Temp.sRole = WebEx.getSelect_ListCheckBox(cblsRole, true);
                objFunctionEO_Temp.bStatus = chkbStatus.Checked;
                Int16 newid = (new FunctionDAO()).Insert(objFunctionEO_Temp);
                //int a = 5;
                //a++ + a-- + --a + ++a + a++ + ++a - a-- + a;
                if (newid > 0)
                {
                    FunctionEO _objTem = new FunctionEO();
                    foreach (ListItem item in cbliAttach.Items)
                    {
                        if (item.Selected)
                        {
                            _objTem.PK_iFunctionID = Convert.ToInt16(newid + Convert.ToInt16(item.Value));
                            _objTem.FK_iFunctionID = newid;
                            _objTem.sName = objFunctionEO_Temp.sName + " > " + item.Text;
                            _objTem.sUrl = objFunctionEO_Temp.sUrl + "?func=" + item.Value;
                            if (chkFull.Checked)
                                _objTem.sRole = objFunctionEO_Temp.sRole;
                            else
                                _objTem.sRole = ",";
                            _objTem.bStatus = objFunctionEO_Temp.bStatus;
                            (new FunctionDAO()).Insert(_objTem);
                        }
                    }
                    txtsUrl.Text = "";
                    txtsName.Text = "";
                    chkbStatus.Checked = true;
                    BindData(true);
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.SUCCESS, "Thêm thành công.");
                }
                else
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Thêm thất bại.");
            }
            catch (Exception ex)
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
        }

        protected void UpdateItem()
        {
            try
            {
                if (objFunctionEO_Temp == null || objFunctionEO_Temp.PK_iFunctionID == 0)
                {
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Vui lòng chọn một chức năng bên dưới.");
                    return;
                }
                if (String.IsNullOrEmpty(txtsUrl.Text))
                {
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Địa chỉ chức năng không được để trống.");
                    txtsUrl.Focus();
                    txtsUrl.Focus();
                    return;
                }
                if (StringEx.Equals(objFunctionEO_Temp.sUrl, OtherEx.RemoveDomainInUrl(txtsUrl.Text)) == false)
                    if ((new FunctionDAO()).CheckExists_sUrl(OtherEx.RemoveDomainInUrl(txtsUrl.Text)))
                    {
                        MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Đã bị trùng địa chỉ với một chức năng khác.");
                        txtsUrl.Focus();
                        return;
                    }
                if (String.IsNullOrEmpty(txtsName.Text))
                {
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Tên không được để trống.");
                    txtsName.Focus();
                    return;
                }
                objFunctionEO_Temp.sUrl = OtherEx.RemoveDomainInUrl(txtsUrl.Text);
                objFunctionEO_Temp.sName = txtsName.Text;
                objFunctionEO_Temp.sRole = WebEx.getSelect_ListCheckBox(cblsRole, true);
                objFunctionEO_Temp.bStatus = chkbStatus.Checked;
                if ((new FunctionDAO()).Update(objFunctionEO_Temp))
                {
                    FunctionEO _objTem = new FunctionEO();
                    foreach (ListItem item in cbliAttach.Items)
                    {
                        if (item.Selected)
                        {
                            _objTem.PK_iFunctionID = Convert.ToInt16(objFunctionEO_Temp.PK_iFunctionID + Convert.ToInt16(item.Value));
                            _objTem.FK_iFunctionID = objFunctionEO_Temp.PK_iFunctionID;
                            _objTem.sName = objFunctionEO_Temp.sName + " > " + item.Text;
                            _objTem.sUrl = objFunctionEO_Temp.sUrl + "?func=" + item.Value;
                            if (chkFull.Checked)
                                _objTem.sRole = objFunctionEO_Temp.sRole;
                            else
                                _objTem.sRole = ",";
                            _objTem.bStatus = objFunctionEO_Temp.bStatus;
                            (new FunctionDAO()).Insert(_objTem);
                        }
                    }
                    BindData(false);
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.SUCCESS, "Sửa thành công.");
                }
                else
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Sửa thất bại.");
            }
            catch (Exception ex)
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
        }

        protected void DeleteItem()
        {
            if (objFunctionEO_Temp == null || objFunctionEO_Temp.PK_iFunctionID == 0)
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Vui lòng chọn một chức năng bên dưới.");
                return;
            }
            if ((new FunctionDAO()).Delete(objFunctionEO_Temp.PK_iFunctionID) == true)
            {
                txtsUrl.Text = "";
                txtsName.Text = "";
                chkbStatus.Checked = true;
                objFunctionEO_Temp = new FunctionEO();
                BindData(true);
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.SUCCESS, "Xóa thành công.");
            }
            else
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Xóa thất bại.");
        }

        protected void grvList_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "cmdView")
            {
                Int32 PK_iCategorysID = Convert.ToInt32(e.CommandArgument);
                BindDetail(PK_iCategorysID);
            }
        }
    }
}